<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2">
<meta name="theme-color" content="#222">
<meta name="generator" content="Hexo 6.0.0">
  <link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon-next.png">
  <link rel="icon" type="image/png" sizes="32x32" href="/images/favicon-32x32-next.png">
  <link rel="icon" type="image/png" sizes="16x16" href="/images/favicon-16x16-next.png">
  <link rel="mask-icon" href="/images/logo.svg" color="#222">

<link rel="stylesheet" href="/css/main.css">


<link rel="stylesheet" href="/lib/font-awesome/css/all.min.css">

<script id="hexo-configurations">
    var NexT = window.NexT || {};
    var CONFIG = {"hostname":"hearthewindsing.gitee.io","root":"/","scheme":"Gemini","version":"7.8.0","exturl":false,"sidebar":{"position":"left","display":"post","padding":18,"offset":12,"onmobile":false},"copycode":{"enable":false,"show_result":false,"style":null},"back2top":{"enable":true,"sidebar":false,"scrollpercent":true},"bookmark":{"enable":false,"color":"#222","save":"auto"},"fancybox":false,"mediumzoom":false,"lazyload":false,"pangu":false,"comments":{"style":"tabs","active":null,"storage":true,"lazyload":false,"nav":null},"algolia":{"hits":{"per_page":10},"labels":{"input_placeholder":"Search for Posts","hits_empty":"We didn't find any results for the search: ${query}","hits_stats":"${hits} results found in ${time} ms"}},"localsearch":{"enable":false,"trigger":"auto","top_n_per_article":1,"unescape":false,"preload":false},"motion":{"enable":true,"async":false,"transition":{"post_block":"fadeIn","post_header":"slideDownIn","post_body":"slideDownIn","coll_header":"slideLeftIn","sidebar":"slideUpIn"}}};
  </script>

  <meta name="description" content="CSAPP读书笔记--综述   CSAPP第一章“a tour of computer systems”是整本书的综述，主要介绍了计算机的基本组成原理和系统概貌，为后面的具体章节提供一个总领纲要，具体包含内容如下：">
<meta property="og:type" content="article">
<meta property="og:title" content="CSAPP读书笔记--综述">
<meta property="og:url" content="https://hearthewindsing.gitee.io/2021/12/25/CSAPP%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0--%E7%BB%BC%E8%BF%B0/index.html">
<meta property="og:site_name" content="且听风吟的博客">
<meta property="og:description" content="CSAPP读书笔记--综述   CSAPP第一章“a tour of computer systems”是整本书的综述，主要介绍了计算机的基本组成原理和系统概貌，为后面的具体章节提供一个总领纲要，具体包含内容如下：">
<meta property="og:locale" content="zh_CN">
<meta property="og:image" content="https://hearthewindsing.gitee.io/2021/12/25/CSAPP%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0--%E7%BB%BC%E8%BF%B0/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B3%BB%E7%BB%9F.png">
<meta property="og:image" content="https://hearthewindsing.gitee.io/2021/12/25/CSAPP%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0--%E7%BB%BC%E8%BF%B0/1640425124438.png">
<meta property="og:image" content="https://hearthewindsing.gitee.io/2021/12/25/CSAPP%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0--%E7%BB%BC%E8%BF%B0/1640441623991.png">
<meta property="og:image" content="https://hearthewindsing.gitee.io/2021/12/25/CSAPP%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0--%E7%BB%BC%E8%BF%B0/1640506971754.png">
<meta property="og:image" content="https://hearthewindsing.gitee.io/2021/12/25/CSAPP%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0--%E7%BB%BC%E8%BF%B0/1640508233263.png">
<meta property="og:image" content="https://hearthewindsing.gitee.io/2021/12/25/CSAPP%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0--%E7%BB%BC%E8%BF%B0/1640508141566.png">
<meta property="og:image" content="https://hearthewindsing.gitee.io/2021/12/25/CSAPP%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0--%E7%BB%BC%E8%BF%B0/1640508257177.png">
<meta property="og:image" content="https://hearthewindsing.gitee.io/2021/12/25/CSAPP%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0--%E7%BB%BC%E8%BF%B0/1640609537188.png">
<meta property="og:image" content="https://hearthewindsing.gitee.io/2021/12/25/CSAPP%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0--%E7%BB%BC%E8%BF%B0/1640611282142.png">
<meta property="article:published_time" content="2021-12-25T07:25:33.909Z">
<meta property="article:modified_time" content="2022-01-09T07:30:49.146Z">
<meta property="article:author" content="且听风吟">
<meta property="article:tag" content="计算机系统">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="https://hearthewindsing.gitee.io/2021/12/25/CSAPP%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0--%E7%BB%BC%E8%BF%B0/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B3%BB%E7%BB%9F.png">

<link rel="canonical" href="https://hearthewindsing.gitee.io/2021/12/25/CSAPP%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0--%E7%BB%BC%E8%BF%B0/">


<script id="page-configurations">
  // https://hexo.io/docs/variables.html
  CONFIG.page = {
    sidebar: "",
    isHome : false,
    isPost : true,
    lang   : 'zh-CN'
  };
</script>

  <title>CSAPP读书笔记--综述 | 且听风吟的博客</title>
  






  <noscript>
  <style>
  .use-motion .brand,
  .use-motion .menu-item,
  .sidebar-inner,
  .use-motion .post-block,
  .use-motion .pagination,
  .use-motion .comments,
  .use-motion .post-header,
  .use-motion .post-body,
  .use-motion .collection-header { opacity: initial; }

  .use-motion .site-title,
  .use-motion .site-subtitle {
    opacity: initial;
    top: initial;
  }

  .use-motion .logo-line-before i { left: initial; }
  .use-motion .logo-line-after i { right: initial; }
  </style>
</noscript>

<style>mjx-container[jax="SVG"] {
  direction: ltr;
}

mjx-container[jax="SVG"] > svg {
  overflow: visible;
}

mjx-container[jax="SVG"][display="true"] {
  display: block;
  text-align: center;
  margin: 1em 0;
}

mjx-container[jax="SVG"][justify="left"] {
  text-align: left;
}

mjx-container[jax="SVG"][justify="right"] {
  text-align: right;
}

g[data-mml-node="merror"] > g {
  fill: red;
  stroke: red;
}

g[data-mml-node="merror"] > rect[data-background] {
  fill: yellow;
  stroke: none;
}

g[data-mml-node="mtable"] > line[data-line] {
  stroke-width: 70px;
  fill: none;
}

g[data-mml-node="mtable"] > rect[data-frame] {
  stroke-width: 70px;
  fill: none;
}

g[data-mml-node="mtable"] > .mjx-dashed {
  stroke-dasharray: 140;
}

g[data-mml-node="mtable"] > .mjx-dotted {
  stroke-linecap: round;
  stroke-dasharray: 0,140;
}

g[data-mml-node="mtable"] > svg {
  overflow: visible;
}

[jax="SVG"] mjx-tool {
  display: inline-block;
  position: relative;
  width: 0;
  height: 0;
}

[jax="SVG"] mjx-tool > mjx-tip {
  position: absolute;
  top: 0;
  left: 0;
}

mjx-tool > mjx-tip {
  display: inline-block;
  padding: .2em;
  border: 1px solid #888;
  font-size: 70%;
  background-color: #F8F8F8;
  color: black;
  box-shadow: 2px 2px 5px #AAAAAA;
}

g[data-mml-node="maction"][data-toggle] {
  cursor: pointer;
}

mjx-status {
  display: block;
  position: fixed;
  left: 1em;
  bottom: 1em;
  min-width: 25%;
  padding: .2em .4em;
  border: 1px solid #888;
  font-size: 90%;
  background-color: #F8F8F8;
  color: black;
}

foreignObject[data-mjx-xml] {
  font-family: initial;
  line-height: normal;
  overflow: visible;
}

.MathJax path {
  stroke-width: 3;
}

mjx-container[display="true"] {
  overflow: auto hidden;
}

mjx-container[display="true"] + br {
  display: none;
}
</style></head>

<body itemscope itemtype="http://schema.org/WebPage">
  <div class="container use-motion">
    <div class="headband"></div>

    <header class="header" itemscope itemtype="http://schema.org/WPHeader">
      <div class="header-inner"><div class="site-brand-container">
  <div class="site-nav-toggle">
    <div class="toggle" aria-label="切换导航栏">
      <span class="toggle-line toggle-line-first"></span>
      <span class="toggle-line toggle-line-middle"></span>
      <span class="toggle-line toggle-line-last"></span>
    </div>
  </div>

  <div class="site-meta">

    <a href="/" class="brand" rel="start">
      <span class="logo-line-before"><i></i></span>
      <h1 class="site-title">且听风吟的博客</h1>
      <span class="logo-line-after"><i></i></span>
    </a>
      <p class="site-subtitle" itemprop="description">莫听穿林打叶声,何妨吟啸且徐行!</p>
  </div>

  <div class="site-nav-right">
    <div class="toggle popup-trigger">
    </div>
  </div>
</div>




<nav class="site-nav">
  <ul id="menu" class="main-menu menu">
        <li class="menu-item menu-item-home">

    <a href="/" rel="section"><i class="fa fa-home fa-fw"></i>首页</a>

  </li>
        <li class="menu-item menu-item-tags">

    <a href="/tags/" rel="section"><i class="fa fa-tags fa-fw"></i>标签</a>

  </li>
        <li class="menu-item menu-item-categories">

    <a href="/categories/" rel="section"><i class="fa fa-th fa-fw"></i>分类</a>

  </li>
        <li class="menu-item menu-item-archives">

    <a href="/archives/" rel="section"><i class="fa fa-archive fa-fw"></i>归档</a>

  </li>
  </ul>
</nav>




</div>
    </header>

    
  <div class="back-to-top">
    <i class="fa fa-arrow-up"></i>
    <span>0%</span>
  </div>


    <main class="main">
      <div class="main-inner">
        <div class="content-wrap">
          

          <div class="content post posts-expand">
            

    
  
  
  <article itemscope itemtype="http://schema.org/Article" class="post-block" lang="zh-CN">
    <link itemprop="mainEntityOfPage" href="https://hearthewindsing.gitee.io/2021/12/25/CSAPP%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0--%E7%BB%BC%E8%BF%B0/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="image" content="/upload/avatar.jpg">
      <meta itemprop="name" content="且听风吟">
      <meta itemprop="description" content="一个普通程序员的技术博客">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="且听风吟的博客">
    </span>
      <header class="post-header">
        <h1 class="post-title" itemprop="name headline">
          CSAPP读书笔记--综述
        </h1>

        <div class="post-meta">
            <span class="post-meta-item">
              <span class="post-meta-item-icon">
                <i class="far fa-calendar"></i>
              </span>
              <span class="post-meta-item-text">发表于</span>

              <time title="创建时间：2021-12-25 15:25:33" itemprop="dateCreated datePublished" datetime="2021-12-25T15:25:33+08:00">2021-12-25</time>
            </span>
              <span class="post-meta-item">
                <span class="post-meta-item-icon">
                  <i class="far fa-calendar-check"></i>
                </span>
                <span class="post-meta-item-text">更新于</span>
                <time title="修改时间：2022-01-09 15:30:49" itemprop="dateModified" datetime="2022-01-09T15:30:49+08:00">2022-01-09</time>
              </span>
            <span class="post-meta-item">
              <span class="post-meta-item-icon">
                <i class="far fa-folder"></i>
              </span>
              <span class="post-meta-item-text">分类于</span>
                <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
                  <a href="/categories/%E6%8A%80%E6%9C%AF/" itemprop="url" rel="index"><span itemprop="name">技术</span></a>
                </span>
                  ，
                <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
                  <a href="/categories/%E6%8A%80%E6%9C%AF/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/" itemprop="url" rel="index"><span itemprop="name">读书笔记</span></a>
                </span>
                  ，
                <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
                  <a href="/categories/%E6%8A%80%E6%9C%AF/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/CSAPP/" itemprop="url" rel="index"><span itemprop="name">CSAPP</span></a>
                </span>
            </span>

          

        </div>
      </header>

    
    
    
    <div class="post-body" itemprop="articleBody">

      
        <h1 id="csapp读书笔记--综述">CSAPP读书笔记--综述</h1>
<p>  CSAPP第一章“a tour of computer systems”是整本书的综述，主要介绍了计算机的基本组成原理和系统概貌，为后面的具体章节提供一个总领纲要，具体包含内容如下：<br>
<span id="more"></span><br>
<img src="/2021/12/25/CSAPP%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0--%E7%BB%BC%E8%BF%B0/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B3%BB%E7%BB%9F.png" class="" title="计算机系统.png"></p>
<h2 id="信息">信息</h2>
<p>  计算机能理解的机器语言是以0、1组成的二进制序列，因此，信息在计算机系统中的表现形式就是二进制的bit序列，8个bit组织成一个语块，称为byte。<br>
  计算机系统中的信息主要分为程序和数据，程序源代码由各种字母符号组成，而每一个字符都会表示成一个字节长度的整型数值，转化的方式就是通过ASCⅡ标准，把字符转换为ASC码。<br>
  因此，系统中所有的信息，包括磁盘文件、内存中存储的代码和用户数据、通过网络传输来的数据等，都是会表示成bit的形式，而他们最终表示的含义取决于环境（context）.</p>
<h2 id="程序源文件如何运行">程序源文件如何运行</h2>
<p>  一段程序源文件是由各种字符组成，而计算机要能够运行，必须将其转化为计算机可识别的二级制可执行文件。这个过程就需要编译器来完成，具体的过程如下：</p>
<img src="/2021/12/25/CSAPP%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0--%E7%BB%BC%E8%BF%B0/1640425124438.png" class="" title="1640425124438.png">
<p>假设源文件为hello.c，它是一个C源文件，它首先通过预处理器进行一些头文件和宏展开，形成一个hello.i文件，然后经过编译，转换成汇编程序文件hello.s，汇编文件再经过汇编器转换成二进制的可重定位目标文件（relocatable object program），到此为止，源文件已经被编译成了二进制的目标文件，但整个过程还没有结束，因为.o文件对应的源C文件中，往往存在调用其他文件或库中函数的情况，因此还需要将相关的所有.o文件merge到一起，这一步就需要由linker(链接器)来完成，通过链接后就会生成可执行目标文件。计算机系统加载可执行文件即可将程序运行起来。</p>
<h2 id="为什么要理解编译系统工作原理">为什么要理解编译系统工作原理</h2>
<ul>
<li>更好地优化程序性能<br>
 重点关注章节：  第三章：介绍X86-64架构的机器语言，以及编译器如何将C文件转化为这种语言；<br>
 第五章：介绍如何通过调整代码结构使编译器能更好地工作，从而提高程序的性能；<br>
 第六章：介绍内存系统层级，以及C编译器如何在内存中保存数组，如何通过这部分知识提升C程序的运行效率；<br>
</li>
<li>理解link阶段的错误<br>
 第7章会介绍link阶段的细节。<br>
</li>
<li>避免安全漏洞<br>
 第三章汇编语言的部分内容会提到栈规则和缓冲区溢出缺陷等。</li>
</ul>
<h2 id="计算机硬件结构">计算机硬件结构</h2>
<p>  一个典型的计算机系统的硬件组成如下：</p>
<img src="/2021/12/25/CSAPP%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0--%E7%BB%BC%E8%BF%B0/1640441623991.png" class="" title="1640441623991.png">
<p>可以看到，一个计算机硬件组成大致如下：<br>
* 总线（bus）<br>
 总线是一组导线组成的线束，它的作用就是在计算机的各组成部件之间传输信息。按照计算机所传输的信息种类，计算机的总线可以划分为数据总线、地址总线和控制总线，分别用来传输数据、数据地址和控制信号。总线是一种内部结构，它是cpu、内存、输入、输出设备传递信息的公用通道，主机的各个部件通过总线相连接，外部设备通过相应的接口电路再与总线相连接，从而形成了计算机硬件系统。总线每次能传输的数据长度成为字（word）,一个word相当于多少个byte则取决于系统，对32位系统，一个word相当于4个字节（32bit）,而对64位系统而言，则等于8个字节（64bit）。 * I/O设备<br>
 I/O device是计算机系统连接外部世界的接口。I/O device连接到I/O bus是通过controller或者adapter,两者的区别主要在于包装方式。controller是设备本身的芯片集或者在系统主板上，而adapter则是插在模板插槽上的一张卡。第6章会介绍I/O device如磁盘是怎样工作的，第10章则会介绍应用程序如何通过UNIX的I/O接口访问设备。<br>
* 主存<br>
 主存是处理器运行程序时存储程序和数据的临时存储设备，物理层面讲，主存是由DRAM（dynamic random access memory）组成的；逻辑层面讲，内存则被组织成字节数组的形式。第6章会介绍内存技术是如何工作的，以及DRAM芯片是如何组合成主内存的。 * 处理器<br>
 处理器，即CPU，负责解释和执行内存中的命令。CPU中有一个重要的寄存器叫PC（program counter），它保存的是即将执行的命令的内存地址（a word-size address）。CPU会读取PC指向的命令，解释指令，执行指令，然后把PC指向下一条待执行的指令。CPU中除了有各种寄存器以外，还有一个重要组成部分叫做ALU（算数逻辑单元），它主要负责对数据和地址的值进行计算。<br>
 CPU常见的指令操作有：  1) load：将数据从内存中读取加载到寄存器中；<br>
 2）store: 将寄存器中内容复制保存到内存中；<br>
 3）operate: 执行运算。复制两个寄存器的内容传给ALU，去执行数学运算，然后将执行结果保存到寄存器里，<br>
 4）jump: 程序跳转。从指令中获取另一个指令执行地址，保存到PC中，使程序跳转到该新指令。</p>
<ul>
<li>其他重要组件  1）DMA  计算机执行程序的时候，由于程序源文件保存在磁盘中，因此CPU需要首先从磁盘中将目标文件读取出来，然后将其加载到内存中，然后才能开始执行。这显然是一个耗费CPU性能的操作，因此DMA（direct memory access）技术出现了。DMA其实就是一个控制器，它负责的事情比较单一，就是将磁盘等外设中的数据直接传输加载到内存，中间不经过CPU，从而减轻了CPU的负担。  2) 缓存<br>
 当CPU在处理程序的时候，需要频繁从内存中读取指令或数据，而这样的操作无疑拖累了程序的运行。为了解决这个问题，于是就有了缓存（cache memory），缓存一般由SRAM(static random access memory)实现，CPU从缓存中读取信息所用的时间会比主存快至少5到10倍。因此，缓存的作用就是将近期常用或即将使用的信息存在缓存中，这样CPU就可以直接通过缓存读取信息，减少从主存中读取，从而大大提高程序运行效率.<br>
 缓存一般又会分级，分为L1 CACHE、L2 CACHE，比较新、比较强大的系统甚至还有L3 CACHE。CPU访问速度：寄存器&gt;L1 CACHE&gt;L2 CACHE&gt;L3 CACHE&gt;主存。L1 CACHE容量大约10,000字节，CPU访问耗时接近于寄存器，L2 CACHE容量约100,000到1,000,000字节，CPU访问耗时比L1 CACHE长约5倍，比主存要短5到10倍。</li>
</ul>
<p>  存储设备按照访问耗时和容量，按如下层级所示：</p>
<img src="/2021/12/25/CSAPP%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0--%E7%BB%BC%E8%BF%B0/1640506971754.png" class="" title="1640506971754.png">
<h2 id="程序运行过程">程序运行过程</h2>
<p>  结合上述计算机硬件组成，我们可以总结一下程序在计算机系统中的运行过程，计算机将程序从磁盘中加载到内存中（DMA），然后CPU通过PC从内存中读取指令到寄存器中，对指令进行解析，并在ALU中进行地址或数据的计算。程序执行过程中，如果需要的话，CPU还会从鼠标、键盘等外部输入设备获取信息，程序运行的结果还可以向显示器等输出设备输出。如图：</p>
<img src="/2021/12/25/CSAPP%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0--%E7%BB%BC%E8%BF%B0/1640508233263.png" class="" title="1640508233263.png">
<img src="/2021/12/25/CSAPP%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0--%E7%BB%BC%E8%BF%B0/1640508141566.png" class="" title="1640508141566.png">
<img src="/2021/12/25/CSAPP%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0--%E7%BB%BC%E8%BF%B0/1640508257177.png" class="" title="1640508257177.png">
<h2 id="操作系统">操作系统</h2>
<p>  操作系统是整个计算机系统的管理者，它位于应用程序和计算机硬件之间，它主要有两个作用：1）保护硬件，防止其被程序误用；2）为上层应用提供简单统一的机制，操控底层复杂且各不相同的硬件。 * 进程（process）:它是计算机对运行的程序的抽象。当单个CPU执行多个进程时，它通常会在多个进程之间频繁切换，以造成每个进程都在独立并行执行的假象，这就是并发。操作系统切换进程时，一般会先保存切换前进程当前的context（当前程序执行的位置（PC），各种寄存器的值等等），然后进入操作系统内核，切换到新的进程。当从其他进程再次切换回来时，需要先加载之前保存的context信息，然后在之前的位置继续往下运行。不同的进程间资源不共享。 * 线程（thread）：它可以被认为是一个轻量级进程，位于进程内部，进程内部可以有多个线程，线程的运行机制跟进程类似，只是他们之间的资源是共享的。<br>
* 虚拟内存：虚拟内存也是一种抽象，它让每个进程都有一种假象：每个进程都独享整个物理内存空间。进程中使用的地址均为虚拟地址。计算机在运行过程中会通过MMU（内存管理单元）将虚拟地址翻译成物理地址再使用。每个进程都有统一的相同的虚拟地址空间，但内存映射表却不同，因此相同的虚拟地址会被映射到不同的物理地址。进程虚拟地址空间的常见布局见下图：</p>
<img src="/2021/12/25/CSAPP%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0--%E7%BB%BC%E8%BF%B0/1640609537188.png" class="" title="1640609537188.png">
<p>  操作系统中各进程公用的程序和数据位于较高的地址，而各进程私有的程序和数据则位于较低的地址，如图，虚拟内存空间常包含如下几个部分： 1） 代码段（text）和数据段(data)，从某个固定的较低地址开始，存放的是可执行文件中的代码段，然后是数据段，数据段存的是进程的全局变量；<br>
2） 堆：堆内存通过malloc和free动态分配和释放； 3）共享库：在中间区域存放的是公共的一些库，如C标准库，数学库等； 4） 栈：栈在整个程序过程中也是动态的，当调用函数的时候，栈会变深（增长），当从函数返回时，栈会变浅（释放）。 5） 内核虚拟内存：最顶端是留给操作系统内核的，是内核虚拟内存，应用程序不能直接访问这段内存，只能通过system call来执行想要的操作。内核与用户程序的隔离，这样的设计也提升了安全性和系统稳定性。</p>
<ul>
<li>文件<br>
文件本质上讲就是一串字节序列，每个I/O设备包括磁盘、键盘、显示器，甚至网络都可以被看作是文件。正所谓“一切皆文件”，这为各种不同的I/O设备提供了统一的视角。</li>
</ul>
<h2 id="网络">网络</h2>
<p>  计算机之间通过网络形成连接互通，计算机将一段内存的数据发送到网络适配器（即网卡），数据流通过网路适配器发送到网络中进行传输，另一端的计算机可通过网卡接收到数据。同样的，计算机也可以从网络中读取到数据。以下是一个通过telnet传输hello到远端的示意图：</p>
<img src="/2021/12/25/CSAPP%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0--%E7%BB%BC%E8%BF%B0/1640611282142.png" class="" title="1640611282142.png">
<h2 id="几个重要主题">几个重要主题</h2>
<ul>
<li>阿姆达尔定律（Amdahl's law）<br>
  其核心思想是，当我们对系统的一部分组件进行加速时，对系统整体性能的提升效果取决于这部分在整个性能中的占比和对这部分组件的提升程度。<br>
  假设系统在执行某个程序的时候，它本来需要耗时Told, 现在对系统某部分进行提升，这部分在总耗时中占比为α，现在这部分的速度提升为原来的k倍，优化性能之后的用时为Tnew, 则设Told/Tnew=S， S满足：</li>
</ul>
<p><span class="math display"><mjx-container class="MathJax" jax="SVG" display="true"><svg style="vertical-align: -2.172ex" xmlns="http://www.w3.org/2000/svg" width="19.101ex" height="5.208ex" role="img" focusable="false" viewBox="0 -1342 8442.4 2302"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D446" d="M308 24Q367 24 416 76T466 197Q466 260 414 284Q308 311 278 321T236 341Q176 383 176 462Q176 523 208 573T273 648Q302 673 343 688T407 704H418H425Q521 704 564 640Q565 640 577 653T603 682T623 704Q624 704 627 704T632 705Q645 705 645 698T617 577T585 459T569 456Q549 456 549 465Q549 471 550 475Q550 478 551 494T553 520Q553 554 544 579T526 616T501 641Q465 662 419 662Q362 662 313 616T263 510Q263 480 278 458T319 427Q323 425 389 408T456 390Q490 379 522 342T554 242Q554 216 546 186Q541 164 528 137T492 78T426 18T332 -20Q320 -22 298 -22Q199 -22 144 33L134 44L106 13Q83 -14 78 -18T65 -22Q52 -22 52 -14Q52 -11 110 221Q112 227 130 227H143Q149 221 149 216Q149 214 148 207T144 186T142 153Q144 114 160 87T203 47T255 29T308 24Z"></path></g><g data-mml-node="mo" transform="translate(922.8,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z"></path></g><g data-mml-node="mfrac" transform="translate(1978.6,0)"><g data-mml-node="mn" transform="translate(2981.9,676)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z"></path></g><g data-mml-node="mrow" transform="translate(220,-710)"><g data-mml-node="mo"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z"></path></g><g data-mml-node="mn" transform="translate(389,0)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z"></path></g><g data-mml-node="mo" transform="translate(1111.2,0)"><path data-c="2212" d="M84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250Z"></path></g><g data-mml-node="mi" transform="translate(2111.4,0)"><path data-c="1D6FC" d="M34 156Q34 270 120 356T309 442Q379 442 421 402T478 304Q484 275 485 237V208Q534 282 560 374Q564 388 566 390T582 393Q603 393 603 385Q603 376 594 346T558 261T497 161L486 147L487 123Q489 67 495 47T514 26Q528 28 540 37T557 60Q559 67 562 68T577 70Q597 70 597 62Q597 56 591 43Q579 19 556 5T512 -10H505Q438 -10 414 62L411 69L400 61Q390 53 370 41T325 18T267 -2T203 -11Q124 -11 79 39T34 156ZM208 26Q257 26 306 47T379 90L403 112Q401 255 396 290Q382 405 304 405Q235 405 183 332Q156 292 139 224T121 120Q121 71 146 49T208 26Z"></path></g><g data-mml-node="mo" transform="translate(2751.4,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z"></path></g><g data-mml-node="mo" transform="translate(3362.7,0)"><path data-c="2B" d="M56 237T56 250T70 270H369V420L370 570Q380 583 389 583Q402 583 409 568V270H707Q722 262 722 250T707 230H409V-68Q401 -82 391 -82H389H387Q375 -82 369 -68V230H70Q56 237 56 250Z"></path></g><g data-mml-node="mi" transform="translate(4362.9,0)"><path data-c="1D6FC" d="M34 156Q34 270 120 356T309 442Q379 442 421 402T478 304Q484 275 485 237V208Q534 282 560 374Q564 388 566 390T582 393Q603 393 603 385Q603 376 594 346T558 261T497 161L486 147L487 123Q489 67 495 47T514 26Q528 28 540 37T557 60Q559 67 562 68T577 70Q597 70 597 62Q597 56 591 43Q579 19 556 5T512 -10H505Q438 -10 414 62L411 69L400 61Q390 53 370 41T325 18T267 -2T203 -11Q124 -11 79 39T34 156ZM208 26Q257 26 306 47T379 90L403 112Q401 255 396 290Q382 405 304 405Q235 405 183 332Q156 292 139 224T121 120Q121 71 146 49T208 26Z"></path></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(5002.9,0)"><g data-mml-node="mo"><path data-c="2F" d="M423 750Q432 750 438 744T444 730Q444 725 271 248T92 -240Q85 -250 75 -250Q68 -250 62 -245T56 -231Q56 -221 230 257T407 740Q411 750 423 750Z"></path></g></g><g data-mml-node="mi" transform="translate(5502.9,0)"><path data-c="1D458" d="M121 647Q121 657 125 670T137 683Q138 683 209 688T282 694Q294 694 294 686Q294 679 244 477Q194 279 194 272Q213 282 223 291Q247 309 292 354T362 415Q402 442 438 442Q468 442 485 423T503 369Q503 344 496 327T477 302T456 291T438 288Q418 288 406 299T394 328Q394 353 410 369T442 390L458 393Q446 405 434 405H430Q398 402 367 380T294 316T228 255Q230 254 243 252T267 246T293 238T320 224T342 206T359 180T365 147Q365 130 360 106T354 66Q354 26 381 26Q429 26 459 145Q461 153 479 153H483Q499 153 499 144Q499 139 496 130Q455 -11 378 -11Q333 -11 305 15T277 90Q277 108 280 121T283 145Q283 167 269 183T234 206T200 217T182 220H180Q168 178 159 139T145 81T136 44T129 20T122 7T111 -2Q98 -11 83 -11Q66 -11 57 -1T48 16Q48 26 85 176T158 471L195 616Q196 629 188 632T149 637H144Q134 637 131 637T124 640T121 647Z"></path></g></g><rect width="6223.9" height="60" x="120" y="220"></rect></g></g></g></svg></mjx-container></span></p>
<ul>
<li><p>并发和并行化<br>
1）线程级并发；<br>
2）指令级并行化； 3）单指令多数据的并行化。</p></li>
<li><p>计算机系统中的抽象<br>
1）文件是I/O设备的抽象；<br>
2）虚拟内存是主存和磁盘的抽象；<br>
3）进程是处理器、主存和I/O设备的抽象。</p></li>
</ul>

    </div>

    
    
    

      <footer class="post-footer">
          <div class="post-tags">
              <a href="/tags/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B3%BB%E7%BB%9F/" rel="tag"># 计算机系统</a>
          </div>

        


        
    <div class="post-nav">
      <div class="post-nav-item"></div>
      <div class="post-nav-item">
    <a href="/2022/01/06/CSAPP%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0--%E4%BF%A1%E6%81%AF%E7%9A%84%E8%A1%A8%E7%A4%BA%E5%92%8C%E4%BD%BF%E7%94%A8(%E4%B8%80)/" rel="next" title="CSAPP读书笔记--信息的表示和使用（一）">
      CSAPP读书笔记--信息的表示和使用（一） <i class="fa fa-chevron-right"></i>
    </a></div>
    </div>
      </footer>
    
  </article>
  
  
  



          </div>
          

<script>
  window.addEventListener('tabs:register', () => {
    let { activeClass } = CONFIG.comments;
    if (CONFIG.comments.storage) {
      activeClass = localStorage.getItem('comments_active') || activeClass;
    }
    if (activeClass) {
      let activeTab = document.querySelector(`a[href="#comment-${activeClass}"]`);
      if (activeTab) {
        activeTab.click();
      }
    }
  });
  if (CONFIG.comments.storage) {
    window.addEventListener('tabs:click', event => {
      if (!event.target.matches('.tabs-comment .tab-content .tab-pane')) return;
      let commentClass = event.target.classList[1];
      localStorage.setItem('comments_active', commentClass);
    });
  }
</script>

        </div>
          
  
  <div class="toggle sidebar-toggle">
    <span class="toggle-line toggle-line-first"></span>
    <span class="toggle-line toggle-line-middle"></span>
    <span class="toggle-line toggle-line-last"></span>
  </div>

  <aside class="sidebar">
    <div class="sidebar-inner">

      <ul class="sidebar-nav motion-element">
        <li class="sidebar-nav-toc">
          文章目录
        </li>
        <li class="sidebar-nav-overview">
          站点概览
        </li>
      </ul>

      <!--noindex-->
      <div class="post-toc-wrap sidebar-panel">
          <div class="post-toc motion-element"><ol class="nav"><li class="nav-item nav-level-1"><a class="nav-link" href="#csapp%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0--%E7%BB%BC%E8%BF%B0"><span class="nav-number">1.</span> <span class="nav-text">CSAPP读书笔记--综述</span></a><ol class="nav-child"><li class="nav-item nav-level-2"><a class="nav-link" href="#%E4%BF%A1%E6%81%AF"><span class="nav-number">1.1.</span> <span class="nav-text">信息</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#%E7%A8%8B%E5%BA%8F%E6%BA%90%E6%96%87%E4%BB%B6%E5%A6%82%E4%BD%95%E8%BF%90%E8%A1%8C"><span class="nav-number">1.2.</span> <span class="nav-text">程序源文件如何运行</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#%E4%B8%BA%E4%BB%80%E4%B9%88%E8%A6%81%E7%90%86%E8%A7%A3%E7%BC%96%E8%AF%91%E7%B3%BB%E7%BB%9F%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86"><span class="nav-number">1.3.</span> <span class="nav-text">为什么要理解编译系统工作原理</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%A1%AC%E4%BB%B6%E7%BB%93%E6%9E%84"><span class="nav-number">1.4.</span> <span class="nav-text">计算机硬件结构</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#%E7%A8%8B%E5%BA%8F%E8%BF%90%E8%A1%8C%E8%BF%87%E7%A8%8B"><span class="nav-number">1.5.</span> <span class="nav-text">程序运行过程</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F"><span class="nav-number">1.6.</span> <span class="nav-text">操作系统</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#%E7%BD%91%E7%BB%9C"><span class="nav-number">1.7.</span> <span class="nav-text">网络</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#%E5%87%A0%E4%B8%AA%E9%87%8D%E8%A6%81%E4%B8%BB%E9%A2%98"><span class="nav-number">1.8.</span> <span class="nav-text">几个重要主题</span></a></li></ol></li></ol></div>
      </div>
      <!--/noindex-->

      <div class="site-overview-wrap sidebar-panel">
        <div class="site-author motion-element" itemprop="author" itemscope itemtype="http://schema.org/Person">
    <img class="site-author-image" itemprop="image" alt="且听风吟"
      src="/upload/avatar.jpg">
  <p class="site-author-name" itemprop="name">且听风吟</p>
  <div class="site-description" itemprop="description">一个普通程序员的技术博客</div>
</div>
<div class="site-state-wrap motion-element">
  <nav class="site-state">
      <div class="site-state-item site-state-posts">
          <a href="/archives/">
        
          <span class="site-state-item-count">2</span>
          <span class="site-state-item-name">日志</span>
        </a>
      </div>
      <div class="site-state-item site-state-categories">
            <a href="/categories/">
          
        <span class="site-state-item-count">3</span>
        <span class="site-state-item-name">分类</span></a>
      </div>
      <div class="site-state-item site-state-tags">
            <a href="/tags/">
          
        <span class="site-state-item-count">1</span>
        <span class="site-state-item-name">标签</span></a>
      </div>
  </nav>
</div>



      </div>

    </div>
  </aside>
  <div id="sidebar-dimmer"></div>


      </div>
    </main>

    <footer class="footer">
      <div class="footer-inner">
        

        

<div class="copyright">
  
  &copy; 
  <span itemprop="copyrightYear">2022</span>
  <span class="with-love">
    <i class="fa fa-heart"></i>
  </span>
  <span class="author" itemprop="copyrightHolder">且听风吟</span>
</div>
  <div class="powered-by">由 <a href="https://hexo.io/" class="theme-link" rel="noopener" target="_blank">Hexo</a> & <a href="https://theme-next.org/" class="theme-link" rel="noopener" target="_blank">NexT.Gemini</a> 强力驱动
  </div>

        








      </div>
    </footer>
  </div>

  
  <script src="/lib/anime.min.js"></script>
  <script src="/lib/velocity/velocity.min.js"></script>
  <script src="/lib/velocity/velocity.ui.min.js"></script>

<script src="/js/utils.js"></script>

<script src="/js/motion.js"></script>


<script src="/js/schemes/pisces.js"></script>


<script src="/js/next-boot.js"></script>




  















  

  
      

<script>
  if (typeof MathJax === 'undefined') {
    window.MathJax = {
      loader: {
        source: {
          '[tex]/amsCd': '[tex]/amscd',
          '[tex]/AMScd': '[tex]/amscd'
        }
      },
      tex: {
        inlineMath: {'[+]': [['$', '$']]},
        tags: 'ams'
      },
      options: {
        renderActions: {
          findScript: [10, doc => {
            document.querySelectorAll('script[type^="math/tex"]').forEach(node => {
              const display = !!node.type.match(/; *mode=display/);
              const math = new doc.options.MathItem(node.textContent, doc.inputJax[0], display);
              const text = document.createTextNode('');
              node.parentNode.replaceChild(text, node);
              math.start = {node: text, delim: '', n: 0};
              math.end = {node: text, delim: '', n: 0};
              doc.math.push(math);
            });
          }, '', false],
          insertedScript: [200, () => {
            document.querySelectorAll('mjx-container').forEach(node => {
              let target = node.parentNode;
              if (target.nodeName.toLowerCase() === 'li') {
                target.parentNode.classList.add('has-jax');
              }
            });
          }, '', false]
        }
      }
    };
    (function () {
      var script = document.createElement('script');
      script.src = '//cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js';
      script.defer = true;
      document.head.appendChild(script);
    })();
  } else {
    MathJax.startup.document.state(0);
    MathJax.texReset();
    MathJax.typeset();
  }
</script>

    

  

</body>
</html>
